package pwd.allen.androiddemo;

import android.app.Application;
import android.content.Context;

import com.danikula.videocache.HttpProxyCacheServer;

import java.io.File;

/**
 * 通过代理的策略实现一个中间层，然后我们的网络请求会转移到本地实现的代理服务器上，这样我们真正请求的数据就会被代理拿到，接着代理一边向本地写入数据，一边根据我们需要的数据看是读网络数据还是读本地缓存数据，从而实现数据的复用。
 * https://zhuanlan.zhihu.com/p/555597703
 * 问题：
 *  从Android9.0开始，出于完全因素考虑，默认不再支持http网络请求，需要使用 https。但是，在AndroidVideoCache中使用了一个缓存代理地址：http://127.0.0.1，可能会报错。
 */
public class MyApplication extends Application {

    private HttpProxyCacheServer proxy;

    public static HttpProxyCacheServer getProxy(Context context) {
        MyApplication app = (MyApplication) context.getApplicationContext();
        return app.proxy == null ? (app.proxy = app.newProxy()) : app.proxy;
    }

    private HttpProxyCacheServer newProxy() {
        String path = getExternalCacheDir().getPath() + "/video";
        File file = new File(getExternalCacheDir().getPath() + "/my-video-cache");
        if (!file.exists()) {
            file.mkdir();
        }

        return new HttpProxyCacheServer.Builder(this)
                .maxCacheSize(512 * 1024 * 1024) // 最大缓存文件的大小
                .cacheDirectory(file)
                .build();
    }

}
